home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’95 / GEQTHack / GEQTHack.src / QTMovieGE.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-24  |  2.9 KB  |  102 lines  |  [TEXT/MMCC]

  1. /*
  2.     QTMovieGE.c
  3.     
  4.     QuickTime movie as a graphic element
  5.     
  6.     Copyright 1995 by Al Evans. All rights reserved.
  7.     
  8.     5/10/95
  9.     
  10.     Machack 6/22/95
  11.     
  12. */
  13.  
  14. #include "QTMovieGE.h"
  15. #include "Rects.h"
  16.  
  17. pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld);
  18. pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element);
  19.  
  20. GrafElPtr NewQTMovieGE(GEWorldPtr world, OSType id, short plane, 
  21.                                             Movie movie, short xPos, short yPos)
  22.                                                             
  23. {
  24.     GrafElPtr    element;
  25.     Rect        movieRect;
  26.  
  27.     element = NewGrafElement(world, id, plane, sizeof(QTMovieGE), NoLoader, 0, 0);
  28.     if (element) {        
  29.         element->copyMode = srcCopy;
  30.         element->flags = geShown;
  31.         element->renderIt = RenderQTMovieGE;
  32.         element->drawIt = nil;
  33.         element->changeIntrvl = 0;
  34.         element->lastChangeTime = CurrentGETime(world);
  35.         
  36.         // Set up movie
  37.         SetMovieGWorld(movie, (CGrafPtr) world->stageGWorld, nil);
  38.         GetMovieBox(movie, &movieRect);
  39.         RectOffset(&movieRect, -movieRect.left, -movieRect.top);
  40.         movieRect.right = movieRect.left + ScaleToWorld(world, RectWidth(&movieRect));
  41.         movieRect.bottom = movieRect.top + ScaleToWorld(world, RectHeight(&movieRect));
  42.         element->graphRect = movieRect;
  43.         element->animationRect = movieRect;
  44.         RectOffset(&element->animationRect, ScaleToWorld(world, xPos), 
  45.                                                 ScaleToWorld(world, yPos));
  46.         SetMovieBox(movie, &element->animationRect);
  47.         GoToBeginningOfMovie(movie);
  48.         
  49.         ChangedRect(world, &element->animationRect);
  50.         ((QTMovieGEPtr) element)->geMovie = movie;
  51.         ((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
  52.         SetCleanupProc(world, id, CleanupMovieGE); 
  53.     }
  54.     return element;
  55.         
  56. }
  57.  
  58. pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld)
  59. {
  60.     /*
  61.         Since QuickTime doesn't pay attention to clipRgn, manipulate the visRgn
  62.         directly. This is MUCH faster than using SetMovieDisplayClipRgn()
  63.     */
  64.     RgnHandle saveRgn = destGWorld->visRgn;
  65.     RgnHandle drawRgn = NewRgn();
  66.     
  67.     RectRgn(drawRgn, &movieElement->drawRect);
  68.     destGWorld->visRgn = drawRgn;
  69.     UpdateMovie(((QTMovieGEPtr) movieElement)->geMovie);
  70.     MoviesTask(((QTMovieGEPtr) movieElement)->geMovie, 1);
  71.     destGWorld->visRgn = saveRgn;
  72.     DisposeRgn(drawRgn);
  73. }
  74.  
  75. pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element)
  76. {
  77.     DisposeMovie(((QTMovieGEPtr) element)->geMovie);
  78. }
  79.  
  80. pascal void GEMovieAutoChange(GEWorldPtr world, GrafElPtr element)
  81. {
  82.     // If element has been moved, move the QT movie to new position
  83.     // (comparing points as longs!)
  84.     if (*((long *) &((QTMovieGEPtr) element)->tlSave) != *((long *) &element->animationRect))
  85.     {
  86.         SetMovieBox(((QTMovieGEPtr) element)->geMovie, &element->animationRect);
  87.         ((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
  88.     }
  89.     ChangedRect(world, &element->animationRect);
  90. }
  91.  
  92. Movie GetGEMovie(GEWorldPtr world, OSType movieGEID)
  93. {
  94.     QTMovieGEPtr movieElement = (QTMovieGEPtr) FindElementByID(world, movieGEID);
  95.     
  96.     if (movieElement == nil)
  97.         return nil;
  98.     else
  99.         return movieElement->geMovie;
  100. }
  101.  
  102.